package cl.inmotion.support.bitacora.view.servlets;

import java.io.IOException;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cl.inmotion.support.bitacora.dao.UsuarioDAO;
import cl.inmotion.support.bitacora.dao.exceptions.EmpresaNotFoundException;

@WebServlet("/updateUsuario")
public class UpdateUsuarioServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		/* Se recuperan todos los datos */
		long id = Long.parseLong(req.getParameter("ID"));
		long idEmpresa = Long.parseLong(req.getParameter("empresa"));

		String username = req.getParameter("username");
		String nombre = req.getParameter("nombre");
		String apellidos = req.getParameter("apellidos");
		String password = req.getParameter("password");

		SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		String fechaVigeciaPar = req.getParameter("fechaVigencia");
		if ((fechaVigeciaPar == null) || fechaVigeciaPar.equals("")) {
			req.setAttribute(
					"errorMsg",
					"Indique la <i>fecha de vigencia</i> del usuario, se trata de un campo obligatorio.");
			req.getRequestDispatcher("/usuarios").forward(req, resp);
			return;
		}

		Timestamp fechaVigencia;
		try {
			fechaVigencia = new Timestamp(format.parse(fechaVigeciaPar)
					.getTime());
		} catch (ParseException e) {
			req.setAttribute(
					"errorMsg",
					"Indique una <i>fecha de vigencia</i> del usuario utilizando el siguiente formato: <b>dd/mm/yyyy</b>.");
			req.getRequestDispatcher("/WEB-INF/jsp/Error.jsp").forward(req,
					resp);
			return;
		}

		boolean esAdmin = Boolean.parseBoolean(req.getParameter("esAdmin"));

		/* Se crea un objeto de negocio */
		UsuarioDAO usuario;
		try {
			usuario = new UsuarioDAO(id, username, nombre, apellidos,
					fechaVigencia, esAdmin, password, idEmpresa);
		} catch (EmpresaNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			req.getRequestDispatcher("/WEB-INF/jsp/Error.jsp").forward(req,
					resp);
			return;
		}

		try {
			usuario.persist();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			req.getRequestDispatcher("/WEB-INF/jsp/Error.jsp").forward(req,
					resp);
			return;
		}

		/* Finalmente se redirecciona al mantenedor de Usuarios */
		req.getRequestDispatcher("/WEB-INF/jsp/mantenedores/Usuarios.jsp")
				.forward(req, resp);
	}

}
